package com.cheng.example.book.advise151.chap5;

import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.List;

/**
 * 建议72：生成子列表后不要再操作原列表
 *
 *
 *
 * 那是因为subList取出的列表是原列表的一个视图，原数据集(代码中的lsit变量)修改了，
 * 但是subList取出的子列表不会重新生成一个新列表(这点与数据库视图是不相同的)，
 * 后面在对子列表继续操作时，就会检测到修改计数器与预期的不相同，于是就抛出了并发修改异常
 */
public class Client72 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("A");
        list.add("B");
        list.add("C");
        List<String> subList = list.subList(0, 2);
        //原字符串增加一个元素
        list.add("D");
        System.out.println("原列表长度："+list.size());
        System.out.println("子列表长度："+subList.size());
    }
}


//出现问题的原因
//    private void checkForComodification()
//    {
//        //判断当前修改计数器是否与子列表生成时一致
//        if(modCount != l.modCount)
//            throw new ConcurrentModificationException();
//        else
//            return;
//    }